package com.itbupt.eat.controller;

import com.itbupt.eat.common.R;
import com.itbupt.eat.dto.SetmealDto;
import com.itbupt.eat.entity.Setmeal;
import com.itbupt.eat.service.ISetmealDishService;
import com.itbupt.eat.service.ISetmealService;
import lombok.extern.slf4j.Slf4j;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author BUPT-Dingchang
 * @Create 2024/4/30 21:00
 * ClassName: SetmealController
 * Description:
 */

@Slf4j
@RestController
@RequestMapping("/setmeal")
public class SetmealController {

   @Autowired
    private ISetmealService setmealService;

    @Autowired
    private ISetmealDishService setmealDishService;


    /**
     * 保存新套餐，同时插入套餐对应菜品
     * @param setmealDto 套餐信息
     * @return  R
     */
    @PostMapping
    public R<String> save(@RequestBody SetmealDto setmealDto) {
        if (setmealService.saveWithSetmealDishes(setmealDto)) {
            return R.success("保存成功");
        }
        return R.error("保存失败");
    }


    /**
     * 分页查询+按名称查询
     * @param page  当前页
     * @param pageSize  每页显示条数
     * @param name  套餐名称
     * @return  分页数据
     */
    @GetMapping("/page")
    public R<Page<SetmealDto>> getPage(Long page, Long pageSize, String name) {
        return R.success(setmealService.getPage(page, pageSize, name));
    }


    /**
     * 套餐的起售/停售
     * @param status    状态
     * @param ids   套餐IDs
     * @return  R
     */
    @PostMapping("/status/{status}")
    public R<String> updateStatus(@PathVariable Integer status, @RequestParam List<Long> ids) {
        if (setmealService.updateStatus(status, ids)) {
            return R.success("操作成功");
        }
        return R.error("操作失败");
    }


    /**
     * 根据id，删除（批量）套餐，同时删除套餐对应菜品
     * @param ids   套餐IDs
     * @return  R
     */
    @DeleteMapping
    public R<String> removeWithDishes(@RequestParam List<Long> ids) {
        if (setmealService.removeWithDish(ids)) {
            return R.success("删除成功");
        }
        return R.error("删除失败");
    }

    //****************************************
    // 以下为新增代码

    /**
     * 根据套餐ID查询单个带套餐菜品的套餐信息
     * @param id   套餐ID
     * @return  R
     */
    @GetMapping("/{id}")
    public R<SetmealDto> getById(@PathVariable Long id) {
        return R.success(setmealService.getByIdWithDishes(id));
    }

    /**
     * 修改套餐信息和套餐关联菜品
     * @param setmealDto 套餐信息
     * @return  R
     */
    @PutMapping
    public R<String> updateWithDishes(@RequestBody SetmealDto setmealDto) {
        if (setmealService.updateWithDishes(setmealDto)) {
            return R.success("修改成功");
        }
        return R.error("修改失败");
    }


    /**
     * 根据条件查询套餐集合
     * @param setmeal  查询条件
     * @return R
     */
    @GetMapping("/list")
    public R<List<Setmeal>> list(Setmeal setmeal) {
        return R.success(setmealService.list(setmeal));
    }

}
